package com.cc.test;
import ch.qos.logback.core.net.SyslogOutputStream;
import com.cc.mapper.EbOrderMapper;
import com.cc.mapper.EbProductCategoryMapper;
import com.cc.mapper.EbUserMapper;
import com.cc.model.EbOrder;
import com.cc.model.EbProductCategory;
import com.cc.model.EbUser;
import com.cc.model.EbUserExample;
import com.github.pagehelper.PageHelper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @Description: 用一句话描述
 * @Auther: 新梦想*陈超
 * @Date: 2020-10-16 09:26
 */
@RunWith(SpringJUnit4ClassRunner.class)  //alt+enter
@ContextConfiguration("classpath:xml/spring-dao.xml")
public class UserTest {
    @Autowired
    private EbUserMapper ebUserMapper;

    @Autowired
    private EbOrderMapper ebOrderMapper;

    @Autowired
    private EbProductCategoryMapper ebProductCategoryMapper;


    //测试用例
    //1.添加的测试用例  B2B  B2C --京东   B2B2C  O2O 新零售
    @Test
    public void whenInsertSuccess(){
        EbUser user = new EbUser();
        //给属性赋值
        for (int i = 0; i <20 ; i++) {
            user.setEuUserId("james"+i);
            user.setEuUserName("勒布朗.詹姆斯"+i);
            user.setEuPassword("123456");
            user.setEuAddress("USA 芝加哥");
            user.setEuSex("T");//T：男  F:女
            //Date日期类   new Date()获取当前系统时间
            // 1999-9-9 new Date(1999-1900,9-1,9)
            user.setEuBirthday(new Date());
            user.setEuStatus(1);

            //添加数据的方法---1.一定要给所有字段添加值
            //result 返回的是受影响的行数  >0 成功  0 失败
            // // insert into eb_user (EU_USER_ID, EU_USER_NAME, EU_PASSWORD, EU_SEX, EU_BIRTHDAY, EU_IDENTITY_CODE, EU_EMAIL, EU_MOBILE, EU_ADDRESS, EU_STATUS) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
            //int result = ebUserMapper.insert(user); //alt+enter
            //添加数据的方法---2.一定要给部分字段添加值 【推荐】
            //insert into eb_user ( EU_USER_ID, EU_USER_NAME, EU_PASSWORD, EU_SEX, EU_BIRTHDAY, EU_ADDRESS, EU_STATUS ) values ( ?, ?, ?, ?, ?, ?, ? )
            int result = ebUserMapper.insertSelective(user);

            //断言 1:期望的result值   result：实际的result值
            Assert.assertEquals(1,result);//如果result等于1 断言通过 否则失败
        }

    }

    //2.更新的测试用例
    @Test
    public void whenUpdateSuccess(){
        EbUser user = new EbUser();
        //给属性赋值
        //必须设置主键值---找到唯一的数据
        user.setEuUserId("james");

        //需要改名字和性别
        user.setEuUserName("勒布朗.詹姆斯2");
        user.setEuSex("F");//T：男  F:女

        //修改数据的方法---1.一定要修改所有字段
        //result 返回的是受影响的行数  >0 成功  0 失败
        // // insert into eb_user (EU_USER_ID, EU_USER_NAME, EU_PASSWORD, EU_SEX, EU_BIRTHDAY, EU_IDENTITY_CODE, EU_EMAIL, EU_MOBILE, EU_ADDRESS, EU_STATUS) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        //int result = ebUserMapper.updateByPrimaryKey(user);
        //添加数据的方法---1.一定修改部分字段 【推荐】
        //insert into eb_user ( EU_USER_ID, EU_USER_NAME, EU_PASSWORD, EU_SEX, EU_BIRTHDAY, EU_ADDRESS, EU_STATUS ) values ( ?, ?, ?, ?, ?, ?, ? )
        int result = ebUserMapper.updateByPrimaryKeySelective(user);

        //断言 1:期望的result值   result：实际的result值
        Assert.assertEquals(1,result);//如果result等于1 断言通过 否则失败
    }

    //上午接下来的任务：预习删除deleteByPrimaryKey 、deleteByExample、查询selectByPrimaryKey 、selectByExample

    //3.删除测试用例
    @Test
    public void whenDeleteSuccess(){//物理删除（非商品项目） 逻辑删除(商业项目 isDeleted )
        //删除数据：1）根据（主键）id进行删除
        //int result = ebUserMapper.deleteByPrimaryKey("jordon");

        //删除数据：2）根据多个条件进行删除
        //需求：根据用户名和密码删除  勒布朗.詹姆斯2和123456
        //delete from eb_user where eu_user_name='勒布朗.詹姆斯2' and eu_password='123456'
        EbOrder order =new EbOrder();
        order.setEoCost(new BigDecimal("3.5"));// 3.5 double

        EbUserExample example = new EbUserExample();
        EbUserExample.Criteria criteria = example.createCriteria();//Criteria 条件类

        //根据条件类Criteria类的对象criteria构建sql条件
        criteria.andEuUserNameEqualTo("勒布朗.詹姆斯2")
                .andEuPasswordEqualTo("123456");

        int result = ebUserMapper.deleteByExample(example);

        Assert.assertEquals(1,result);
    }

    //4.普通查询
    @Test
    public void whenSelectSuccess(){
        //查询数据：1.根据主键id 查询
//        EbUser user = ebUserMapper.selectByPrimaryKey("admin");
//        System.out.println(user);

        //查询数据：2.根据多个条件 查询
        //登录---select * from eb_user  where eu_user_name="管理员" and eu_password="admin"

        EbUserExample example =new EbUserExample();
        EbUserExample.Criteria criteria = example.createCriteria();

        //构建查询条件
        criteria//.andEuUserNameEqualTo("管理员")
                //.andEuPasswordEqualTo("admin");
                    .andEuSexEqualTo("F");
        //List 集合(EbUser) ===>（蛇皮袋--西瓜 东瓜....）

        List<EbUser> ebUsers = ebUserMapper.selectByExample(example);
        System.out.println(ebUsers);

    }

    //5.分页查询---分页插件
    @Test
    public void whenPageSuccess(){

        //查询所有用户信息
        //1. 查询第1页  每页显示5条
       // PageHelper.startPage(1,5);

        //2. 查询第2页  每页显示5条
        PageHelper.startPage(2,5);
        List<EbUser> ebUsers = ebUserMapper.selectByExample(null);
        for (EbUser ebUser : ebUsers) {
            System.out.println(ebUser);
        }


//        List<EbUser> ebUsers2 = ebUserMapper.selectByExample(null);
//        for (EbUser ebUser : ebUsers2) {
//            System.out.println(ebUser);
//        }
    }

    //6.查询所有大类和所有小类  李浩
    @Test
    public void whenSelectBigAndSmallCategorySuccess(){
        //ebProductCategoryMapper.selectByExample();

        //1.查询所有大类
        List<EbProductCategory> bigs = ebProductCategoryMapper.selectBigCategory();
        System.out.println("所有大类："+bigs);
        //2.查询所有小类
        List<EbProductCategory> smalls = ebProductCategoryMapper.selectSmallCategory();
        System.out.println("所有小类："+smalls);

        //3.将对应的显示到对应的大类下
        for (EbProductCategory big : bigs) {
            System.out.println(big.getEpcName());
            for (EbProductCategory small : smalls) {
                if(small.getEpcParentId().equals(big.getEpcId())){
                    System.out.println("\t\t\t"+small.getEpcName());
                }

            }
        }

    }




}














